package com.doubao.chat.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.doubao.chat.dto.ChatContextDTO;
import com.doubao.chat.dto.ChatSessionDTO;
import com.doubao.chat.dto.request.*;
import com.doubao.chat.entity.ChatSession;
import com.doubao.common.result.Result;

/**
 * 聊天会话服务接口
 */
public interface ChatSessionService extends IService<ChatSession> {

    /**
     * 创建聊天会话
     *
     * @param userId  用户ID
     * @param request 创建会话请求
     * @return 会话信息
     */
    Result<ChatSessionDTO> createSession(Long userId, CreateSessionRequest request);

    /**
     * 获取用户会话列表
     *
     * @param userId  用户ID
     * @param request 获取会话列表请求
     * @return 会话列表
     */
    Result<IPage<ChatSessionDTO>> getSessionList(Long userId, GetSessionListRequest request);

    /**
     * 获取会话详情
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     * @return 会话信息
     */
    Result<ChatSessionDTO> getSessionDetail(Long userId, Long sessionId);

    /**
     * 更新会话
     *
     * @param userId  用户ID
     * @param request 更新会话请求
     * @return 更新结果
     */
    Result<Void> updateSession(Long userId, UpdateSessionRequest request);

    /**
     * 删除会话
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     * @return 删除结果
     */
    Result<Void> deleteSession(Long userId, Long sessionId);

    /**
     * 批量删除会话
     *
     * @param userId  用户ID
     * @param request 批量删除会话请求
     * @return 删除结果
     */
    Result<Void> batchDeleteSessions(Long userId, BatchDeleteSessionRequest request);

    /**
     * 清空会话消息
     *
     * @param userId  用户ID
     * @param request 清空会话请求
     * @return 清空结果
     */
    Result<Void> clearSession(Long userId, ClearSessionRequest request);

    /**
     * 查找用户与设备的最近会话
     *
     * @param userId   用户ID
     * @param deviceId 设备ID
     * @return 最近的会话，如果没有则返回null
     */
    ChatSession findRecentSession(Long userId, Long deviceId);
    /**
     * 导出会话（暂时注释掉）
     *
     * @param userId  用户ID
     * @param request 导出会话请求
     * @return 导出文件URL
     */
    Result<String> exportSession(Long userId, ExportSessionRequest request);


    /**
     * 获取会话完整上下文
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     * @return 会话上下文
     */
    Result<ChatContextDTO> getSessionContext(Long userId, Long sessionId);
}